package com.linkgie.galaxyframework.data.utils;

/**
 * 唯一标识符(Id)序列生成器；<p>
 * 
 * 生成固定长度且趋势递增的唯一标识符(Id)；
 * 
 * @author spring
 *
 */
public interface IdGenerator {
	
	/**
	 * Id 的字节长度；
	 * 
	 * @return
	 */
	int size();
	
	/**
	 * 生成字节数组形式的唯一标识符；
	 * 
	 * @return
	 */
	default byte[] generateId() {
		byte[] idBytes = new byte[size()];
		generateId(idBytes, 0);
		return idBytes;
	}
	
	/**
	 * 生成字节数组形式的唯一标识符；
	 * 
	 * @return
	 */
	default void generateId(byte[] idBytes) {
		generateId(idBytes, 0);
	}
	
	/**
	 * 生成字节数组形式的唯一标识符；
	 * 
	 * @return
	 */
	void generateId(byte[] idBytes, int offset);


	/**
	 * 生成Base58字符串形式的唯一标识符；
	 * 
	 * @return
	 */
	String generateIdAsBase58();

}
